Плохо! Плохо!:  0
Показано с 1 по 3 из 3

Тема: [MV + MZ]DKR_ForcedSaveLoad

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MV + MZ]DKR_ForcedSaveLoad

    Название плагина: DKR_ForcedSaveLoad

    Автор: DarchanKaen

    Версия: 2.0 (MV) и 2.0 (MZ)

    Дата выхода:
    02.10.2021 - версия 2.0 для MZ
    16.09.2021 - версия 2.0 (только MV)
    16.05.2021 - версия 1.0 (MV и MZ)

    Описание плагина:
    Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без открытия экрана сохранения/загрузки. Аналог автосохранения.
    В версии 2.0 также можно блокировать / разблокировать слот сохранения для ручной записи в слот.

    Параметры плагина:
    Номер переменной для хранения Списка доступности слотов сохранения; по-умолчанию используетсяся переменная №7.
    Можно поменять, но не затирайте данную переменную во время игры!

    Использование плагина:

    Одинаково для MV и для MZ!

    В эвенте, команде "Скрипт", написать одну из следующих команд:

    DKR.ForcedSaveLoad.onOffManualSaveSlot(isSaveFileE nabled, saveFileIndex);
    DKR.ForcedSaveLoad.forcedSave(saveFileIndex);
    DKR.ForcedSaveLoad.forcedLoad(saveFileIndex);

    где:
    isSaveFileEnabled - true (можно сохранять в слот вручную) или false (слот закрыт для ручного сохранения).
    saveFileIndex - номер файла сохранения, который больше 0;

    В случае указания неверного номера файла сохранения в игре ничего не происходит: ошибка Игроку не отображается, но сохранение/загрузка также не происходит; при этом в консоль разработчика отображается сообщение об ошибке вида:
    'DKR.ForcedSaveLoad_SAVE: save file index can\'t be below one!'

    Спойлер Код плагина для MV, версия 2.0:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR ForcedSaveLoad 2.0
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MV
    //  DKR_ForcedSaveLoad_2_MV.js
    //-----------------------------------------------------------------------------
    //  16.09.2021 - Версия 2.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_ForcedSaveLoad = true;
    
    var DKR = DKR || {};          
    DKR.ForcedSaveLoad = DKR.ForcedSaveLoad  || {}; 
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.2.0.0) Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без открытия экрана сохранения/загрузки. Аналог автосохранения.
     * 
     * @target MV
     * @author DarchanKaen
     *
     * @help
     *   DKR ForcedSaveLoad
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без  
     * открытия экрана сохранения/загрузки. Аналог автосохранения.
     *
     * Также плагин позволяет закрыть / открыть возможность ручного сохранения в 
     * указанный слот сохранения (например, сделать слот автосохранения недоступным
     * для записи, как в MZ).
     *
     * Номер файла сохранения не должен больше нуля; по-умолчанию номер файла сохранения равняется 1.
     * 
     * Для корректной работы доступности слотов сохранения используется переменная, хранящая список
     * и по-умолчанию исп-ся переменная №7 - не затирайте ее!
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ForcedSaveLoad.onOffManualSaveSlot(isSaveFileEnabled, saveFileIndex) - вкл/выкл возможность ручного сохр-я в слот.
     * DKR.ForcedSaveLoad.forcedSave(saveFileIndex) - принудительное сохранение в указанный слот.
     * DKR.ForcedSaveLoad.forcedLoad(saveFileIndex) - принудительная загрузка из указанного слота.
     * где 
     * isSaveFileEnabled - true (можно сохранять в слот вручную) или false (слот закрыт для ручного сохранения).
     * saveFileIndex - номер слота сохранения для сохранения / загрузки (д.б. больше 0!).
     * ----------------------------------------------------------------------------
     *
     * @param saveSlotsStatusesListVarId
     * @type variable
     * @desc Номер переменной для сохранения Списка доступности слотов сохранения
     * @default 7
     *
     */
    
    (function() { 
    
    
    
    //----DATA
    DKR.ForcedSaveLoad.parameters = PluginManager.parameters('DKR_ForcedSaveLoad_2_MV');
    let saveSlotsStatusesListVarId = Number(DKR.ForcedSaveLoad.parameters["saveSlotsStatusesListVarId"]) || 7;
    
    
    
    //----LOGIC
    const isSavefileEnabled = function(savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	let isSavefileEnabled = false;
    	
    	const saveSlotStatus = saveSlotsStatusesList[savefileId];
    	if(undefined === saveSlotStatus || true === saveSlotStatus.slotEnabled){
    		isSavefileEnabled = true;
    	}else{
    		isSavefileEnabled = false;
    	}
    	
    	return isSavefileEnabled;
    }
    
    
    const enableOrDisableSaveSlot = function(isSaveFileEnabled, savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	const saveSlotStatus = {slotId: savefileId, slotEnabled: isSaveFileEnabled};
    	saveSlotsStatusesList[savefileId] = saveSlotStatus;
    	
    	$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    }
    
    
    const saveForeced = function(saveFileIndex = 1){
    	if(saveFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_SAVE: save file index can\'t be below one!');
    		return false
    	}
    	console.log('DKR.ForcedSaveLoad: force save in file #' + saveFileIndex + '...');
    	$gameSystem.onBeforeSave();
    	DataManager.saveGame(saveFileIndex);
    }
    
    
    const loadForced = function(loadFileIndex = 1){
    	if(loadFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_LOAD: save file index can\'t be below one!');
    		return false
    	}
    	if(false === StorageManager.exists(loadFileIndex)){
    		console.log('DKR.ForcedSaveLoad_LOAD: saveFile ' + loadFileIndex + ' not exist!');
    		return false
    	}
    	if(true === DataManager.isAnySavefileExists()){
    		console.log('DKR.ForcedSaveLoad: force load save file #' + loadFileIndex + '...');
    		if (DataManager.loadGame(loadFileIndex)) {
    			$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
    			$gamePlayer.requestMapReload();
    			SceneManager.goto(Scene_Map);
    		}
    	}
    }
    
    
    
    //----MODIFY CORE-LIB
    //--save process
    Scene_Save.prototype.onSavefileOk = function() {
        Scene_File.prototype.onSavefileOk.call(this);
    	
    	let savefileId =  this.savefileId();
    	
    	if( true === isSavefileEnabled(savefileId) ){
    		$gameSystem.onBeforeSave();
    		if (DataManager.saveGame(this.savefileId())) {
    			this.onSaveSuccess();
    			
    			let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    			saveSlotsStatusesList.push( {slotId: savefileId, slotEnabled: true} );
    			$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    			
    			//saveSlotsStatusesList.push( {slotId: savefileId, slotEnabled: true} );
    		} else {
    			this.onSaveFailure();
    		}
    	} else {
    		this.onSaveFailure();
    	}
        
    };
    
    
    //--save GUI
    Window_SavefileList.prototype.drawItem = function(index) {
        var id = index + 1;
        var valid = DataManager.isThisGameFile(id);
    	
    	valid = isSavefileEnabled(id);
    	
        var info = DataManager.loadSavefileInfo(id);
        var rect = this.itemRectForText(index);
        this.resetTextColor();
        if (this._mode === 'load') {
            this.changePaintOpacity(valid);
        }
        this.drawFileId(id, rect.x, rect.y);
        if (info) {
            this.changePaintOpacity(valid);
            this.drawContents(info, rect, valid);
            this.changePaintOpacity(true);
        }
    };
    
    
    
    //----COMMANDS
    DKR.ForcedSaveLoad.onOffManualSaveSlot = function(isSaveFileEnabled, saveFileIndex){	
    	enableOrDisableSaveSlot(isSaveFileEnabled, saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedSave = function(saveFileIndex){
    	saveForeced(saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedLoad = function(loadFileIndex){
    	loadForced(loadFileIndex);
    }
    
    
    	
    })();


    Спойлер Код плагина для MZ, версия 2.0:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR ForcedSaveLoad
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MZ
    //  DKR_ForcedSaveLoad_MZ.js
    //-----------------------------------------------------------------------------
    //  02.10.2021 - Версия 2.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_ForcedSaveLoad = true;
    
    var DKR = DKR || {};          
    DKR.ForcedSaveLoad = DKR.ForcedSaveLoad  || {}; 
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.2.0.0) Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без открытия экрана сохранения/загрузки. Аналог автосохранения.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR ForcedSaveLoad
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без  
     * открытия экрана сохранения/загрузки. Аналог автосохранения.
     *
     * Также плагин позволяет закрыть / открыть возможность ручного сохранения в 
     * указанный слот сохранения (например, сделать слот автосохранения недоступным
     * для записи, как в MZ).
     *
     * Номер файла сохранения не должен больше нуля; по-умолчанию номер файла сохранения равняется 1.
     * 
     * Для корректной работы доступности слотов сохранения используется переменная, хранящая список
     * и по-умолчанию исп-ся переменная №7 - не затирайте ее!
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ForcedSaveLoad.onOffManualSaveSlot(isSaveFileEnabled, saveFileIndex) - вкл/выкл возможность ручного сохр-я в слот.
     * DKR.ForcedSaveLoad.forcedSave(saveFileIndex) - принудительное сохранение в указанный слот.
     * DKR.ForcedSaveLoad.forcedLoad(saveFileIndex) - принудительная загрузка из указанного слота.
     * где 
     * isSaveFileEnabled - true (можно сохранять в слот вручную) или false (слот закрыт для ручного сохранения).
     * saveFileIndex - номер слота сохранения для сохранения / загрузки (д.б. больше 0!).
     * ----------------------------------------------------------------------------
     *
     * @param saveSlotsStatusesListVarId
     * @type variable
     * @desc Номер переменной для сохранения Списка доступности слотов сохранения
     * @default 7
     *
     */
     
     
     
    (function() { 
    
    
    
    //----DATA
    DKR.ForcedSaveLoad.parameters = PluginManager.parameters('DKR_ForcedSaveLoad_2_MZ');
    let saveSlotsStatusesListVarId = Number(DKR.ForcedSaveLoad.parameters["saveSlotsStatusesListVarId"]) || 7;
    
    
    
    //----LOGIC
    const isSavefileEnabledByPlugin = function(savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	let isSavefileEnabled = false;
    	
    	const saveSlotStatus = saveSlotsStatusesList[savefileId];
    	if(undefined === saveSlotStatus || null === saveSlotStatus || true === saveSlotStatus.slotEnabled){
    		isSavefileEnabled = true;
    	}else{
    		isSavefileEnabled = false;
    	}
    	
    	return isSavefileEnabled;
    }
    
    const enableOrDisableSaveSlot = function(isSaveFileEnabled, savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	const saveSlotStatus = {slotId: savefileId, slotEnabled: isSaveFileEnabled};
    	saveSlotsStatusesList[savefileId] = saveSlotStatus;
    	
    	$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    }
    
    
    const saveForeced = function(saveFileIndex = 1){
    	if(saveFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_SAVE: save file index can\'t be below one!');
    		return false
    	}
    	console.log('DKR.ForcedSaveLoad: force save in file #' + saveFileIndex + '...');
    	$gameSystem.onBeforeSave();
    	DataManager.saveGame(saveFileIndex);
    }
    
    const loadForced = function(loadFileIndex = 1){
    	if(loadFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_LOAD: save file index can\'t be below one!');
    		return false
    	}
    	if(false === DataManager.savefileExists(loadFileIndex)){
    		console.log('DKR.ForcedSaveLoad_LOAD: saveFile ' + loadFileIndex + ' not exist!');
    		return false
    	}
    	if(true === DataManager.isAnySavefileExists()){
    		console.log('DKR.ForcedSaveLoad: force load save file #' + loadFileIndex + '...');
    		if (DataManager.loadGame(loadFileIndex)) {
    			$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
    			$gamePlayer.requestMapReload();
    			SceneManager.goto(Scene_Map);
    		}
    	}
    }
    
    
    
    //----MODIFY CORE-LIB-MZ
    //--save process
    Scene_Save.prototype.onSavefileOk = function() {
        Scene_File.prototype.onSavefileOk.call(this);
        const savefileId = this.savefileId();
    	
        if (this.isSavefileEnabled(savefileId) && true === isSavefileEnabledByPlugin(savefileId) ) {
    		
    		let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    		saveSlotsStatusesList.push( {slotId: savefileId, slotEnabled: true} );
    		$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    		
            this.executeSave(savefileId);
        } else {
            this.onSaveFailure();
        }
    	
    }
    
    //--save GUI
    Window_SavefileList.prototype.isEnabled = function(savefileId) {
        if (this._mode === "save") {
    		if( true === isSavefileEnabledByPlugin(savefileId) ){
    			return savefileId > 0;
    		}
        } else {
            return !!DataManager.savefileInfo(savefileId);
        }
    };
    
    
    
    //----COMMANDS
    DKR.ForcedSaveLoad.onOffManualSaveSlot = function(isSaveFileEnabled, saveFileIndex){	
    	enableOrDisableSaveSlot(isSaveFileEnabled, saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedSave = function(saveFileIndex){
    	saveForeced(saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedLoad = function(loadFileIndex){
    	loadForced(loadFileIndex);
    }
    
    
    	
    })();



    Ссылки на загрузку:
    MV
    АКТУАЛЬНАЯ версия 2.0:
    https://www.mediafire.com/file/63g1p...d_2_MV.js/file
    СТАРАЯ версия 1.0:
    https://www.mediafire.com/file/4uvv8...oad_MV.js/file
    MZ:
    АКТУАЛЬНАЯ версия 2.0:
    https://www.mediafire.com/file/rl9jd...d_2_MZ.js/file
    СТАРАЯ версия 1.0:
    https://www.mediafire.com/file/yicju...oad_MZ.js/file

    Спойлер Лирическое отступление:
    Сначала писал Рольфу для его плагина...потом подумал, а почему бы не сделать отдельным? =)
    Плюс слова Phileasа о плагинах...

    Да, то что в плагине можно сделать и на эвентах командой "Скрипт".
    Но тут я дописал доп. проверку на существование файла сохранения и корректность его номера (номер должен быть положительным).

    Возможно такой плагин(ы) есть, но будет еще вариант.


    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    P.S:
    Спасибо Phileas за идею работы над плагинами!
    Последний раз редактировалось Darchan Kaen; 02.10.2021 в 18:21. Причина: Версия 2.0 для MZ !

  2. #2
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Выпущена версия 2.0 для MV!
    Код версии MV обновлен, добавлена ссылка на загрузку новой версии.
    Ссылка для версии 1.0 MV, тем не менее, осталась.

    Исправления:

    Номер файла сохранения / загрузки по-умолчанию теперь 1, а не 0 - т.к. "0" мейкер корректно не воспринимает.

    Новый функционал:

    Теперь можно заблокировать слот сохранения, используемые для Автосохранения (или не для него), от ручной записи (как это реализовано в MZ).

    Можно блокировать / разблокировать нужное количество слотов и делать это по ходу игры вызовом скрипта.

    Для корректной работы данной функции Спиской доступности слотов сохранения хранится в переменной, по умолчанию - в переменной №7.

    Номер переменной можно изменить в параметре плагина, главное - не затирайте переменную в процессе игры!

    P.S:
    Постепенно буду обновлять свои плагины. Так как решил сидеть на MV, то в первую очередь - версии для MV.
    Последний раз редактировалось Darchan Kaen; 15.09.2021 в 23:48. Причина: Дооформление

  3. #3
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Выпущена версия 2.0 для MZ!
    Исправление / изменения / функционал / команды аналогичны версии 2.0 для MV.

    Обновлен код плагина MZ до версии 2.0, добавлены ссылка на загрузку файла плагина 2.0 для MZ (1.0 осталась).

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MV + MZ]DKR_ForcedSaveLoad